#ifndef _BLOCKBREAKER_RENDER_RENDERER_H__
#define _BLOCKBREAKER_RENDER_RENDERER_H__

#include <Model/Include/Scene.h>

#include <Render/Include/RenderObject.h>


/// \brief abstract class that offers the rendering and graphics device related functionality
/// \details it is intended to be specialized in different platforms as desired, DX9, DX10, OpenGL
class Renderer
{
public:
    virtual ~Renderer(void);

    virtual void renderScene(Scene* scene, Paddle* local_player_paddle) = 0;
    virtual void renderBlack() = 0;

    void render3D();
    void render2D();

    void addText(std::string text, int pos_x, int pos_y, int size);

protected:
    typedef struct 
    {
        std::string text;
        int pos_x;
        int pos_y;
        int size;
    }TextDataType;

    std::vector<TextDataType*> text_to_render;

    RenderObject* cube_render_object;
    RenderObject* ball_render_object;
    bool render_3D;

    Renderer(void);

    void clearText();
};

#endif // _BLOCKBREAKER_RENDER_RENDERER_H__
